﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Spring.Transaction.Interceptor;
using OpenSda.Agilcont.Common.Data.Entities;
using OpenSda.Agilcont.Common.Data.Contracts;
using OpenSda.Agilcont.Common.Business.Exceptions;
using OpenSda.Agilcont.Common.Business.Contracts;

namespace OpenSda.Agilcont.Common.Business.SfContexts
{
    public class EjercicioContableBusiness : IEjercicioContableBusiness
    {
        IEjercicioContableData ejercicioContableData;
        IEmpresaData empresaData;
        public IEjercicioContableData EjercicioContableData { set { ejercicioContableData = value; } }
        public IEmpresaData EmpresaData { set { empresaData = value; } }

        public EjercicioContableBusiness()
        {
            
        }

        [Transaction]
        public EjercicioContable Save(EjercicioContable ejercicioContable)
        {
            if (ejercicioContable == null) //|| ejercicioContable.Identity == Guid.Empty
                throw new EjercicioContableCannotBeNullException();
            // Não permitir duplicar Anio
            if (ejercicioContableData.GetAllQueryable().Where(ms => ms.Identity != ejercicioContable.Identity && ms.Anio == ejercicioContable.Anio).Count() > 0)
                throw new EjercicioContableCodeInUseException();

            // Não permitir duplicar EstadoActivo
            if (ejercicioContableData.GetAllQueryable().Where(ms => ms.Identity != ejercicioContable.Identity && ms.EstadoActivo == ejercicioContable.EstadoActivo).Count() > 0)
                throw new EjercicioContableNameInUseException();

            return ejercicioContableData.Save(ejercicioContable);
        }


        public EjercicioContable Delete(EjercicioContable ejercicioContable)
        {
            throw new NotImplementedException();
        }

        public EjercicioContable GetByid(EjercicioContable ejercicioContable)
        {
            throw new NotImplementedException();
        }

        public EjercicioContable GetListByFilter(EjercicioContable ejercicioContable)
        {
            throw new NotImplementedException();
        }
    }
}
